import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;

public class TcpClient3 {

    // 服务端 IP或者域名
    private static final String SERVER_HOST = "localhost";
    // 服务端Socket 进程的端口号
    private static final int SERVER_PORT = 8888;

    public static void main(String[] args) throws IOException {
        // 准备要发送的数据： 从键盘获取输入
        Scanner scanner = new Scanner(System.in);
        while(true){
            // 根据键盘输入构造一个请求对象， 包含操作类型，操作路径，长度和数据
            Request request = build(scanner);

            // 3. 创建一个客户端流套接字Socket，并与对应IP的书籍
            Socket socket = new Socket(SERVER_HOST, SERVER_PORT);

            // 4. 发送TCP 数据， 通过socket中的输出流进行发送
            OutputStream os = socket.getOutputStream();
            // 4-1 发送请求数据， 按照约定的格式输出请求对象中的内容
            System.out.println("客户端发送请求："+request);
            request.clientWrite(os);

            // 8.接收返回的响应数据： 通过socket中的输入流获取
            InputStream is = socket.getInputStream();
            // 根据约定的格式获取响应数据
            Response response = Response.clientParse(is);
            System.out.println("客户端收到响应："+response);

            // 9. 双方关闭连接：客户端socket连接
            socket.close();
        }
    }

    public static Request build(Scanner scanner) throws IOException{
        System.out.println("————————————————————————————————————————————————————");
        System.out.println("请输入要操作的类型：1（展示目录文件列表），2（文件重命名）" +
                "， 3（删除文件），4（上传文件），5（下载文件）");
        Request request = new Request();
        int type = Integer.parseInt(scanner.nextLine());
        System.out.println("请输入要操作的路径");
        String url = scanner.nextLine();
        String data ="";
        // 不同的操作需要的信息不同
        if(type == 2){  // 重命名操作，需要输入重命名的名称
            System.out.println("请输入重命名的名称：");
            data = scanner.nextLine();
        }else if(type==4){  // 文件上传， 需要提供上传的文件路径
            System.out.println("请输入要上传的文件路径：");
            String upload = scanner.nextLine();
            data = new String(Files.readAllBytes(Paths.get(upload)));

        }else if(type!=1 && type!=3 && type!=5){
            System.out.println("只能输入1-5的数字，请重新输入：");
            return build(scanner);
        }
        request.setType(type);
        request.setUrl(url);
        request.setData(data);
        return request;
    }




}
